
#ifndef MAIN_CONTAINER_H

#define MAIN_CONTAINER_H

#include "trace.h"
#include "debug.h"
#include "error_report.h"
#include "flag_checker.h"
#include "file_loader.h"
#include "loaded_file.h"
#include "lexic_analyzer.h"
#include "generic_table.h"
#include "generic_table.cpp" // TODO: this is dirty hack
#include "syntax_tree.h"
#include "syntax_parser.h"

#include "semantic_analyzer.h"



class MainContainer
{
public:
	MainContainer();
	~MainContainer();

#ifdef TRACE
	Trace * LogTrace;
#endif

#ifdef DEBUG
	Debug * LogDebug;
#endif

	ErrorReport * ErrorWarningReport;
	FlagChecker * Flags;
	FileLoader * Loader;

	GenericTable<LoadedFile> * LoadedFiles;
	LexicAnalyzer * Lexic;
	LexicUnits * Units; // TODO
	
	AbstractSyntaxTree * SyntaxTree;
	Parser * SyntaxParser;

	SemanticAnalyzer * Semantics;
	//int LoadedFilesCount;

};

#endif
